教務處將學生資料、課程詳情和選課記錄分別存放在不同的資料表中。請建立一份報告,將 正確的學生姓名對應到正確的課程。
你的三項需求
- 找出 Emma Li 目前修讀中的課程。
- 列出修讀中的選課記錄,包含學生姓名和課程名稱。
- 提供 DSAI 學生修讀中 PY101 的修課名單。
準備 PostgreSQL
- 在 pgAdmin 中,從助教資料夾
lab6_7_setup.sql開啟提供的DSAI2202/lab6_7/並將整個檔案執行一次。 - 確認最後的統計數字: 22 位學生、8 門課程、37 筆選課記錄。
- 執行右側的連線設定。每次開啟新的資料庫連線時,請重複執行此設定。
- 在合併資料表之前,先檢視這三個資料表。
Lab 7 使用相同的設定,包括 assignments、 submissions,以及 lms_roster。今天請使用這裡顯示的三個資料表。所有人物與記錄均為虛構。
✍️ 合併前先手動追溯
找出選課記錄 E01。它包含哪個學號和課程代碼?使用「資料」分頁找出對應的學生姓名和課程名稱。
SET search_path TO lab6_7;SET search_path TO lab6_7;
SELECT student_id, student_name, programme
FROM students
ORDER BY student_id;SET search_path TO lab6_7;
SELECT course_code, course_title, credits
FROM courses
ORDER BY course_code;SET search_path TO lab6_7;
SELECT enrolment_id, student_id, course_code,
enrolment_status, score
FROM enrolments
ORDER BY enrolment_id;三個資料表的簡要預覽
students:22 筆資料。 student_id 是主鍵。
| student_id | student_name | programme |
|---|---|---|
| S101 | Alice Wong | DSAI |
| S102 | Ben Lau | CS |
| S105 | Emma Li | CS |
courses:8 筆資料。 course_code 是主鍵。
| course_code | course_title | credits |
|---|---|---|
| SQL101 | SQL 基礎 | 3 |
| PY101 | Python 程式設計 | 3 |
| WEB101 | 網頁資料庫 | 3 |
enrolments:37 筆資料,其中包含 30 筆使用中及 7 筆已退選。 enrolment_id 是主鍵。
| enrolment_id | student_id | course_code | enrolment_status |
|---|---|---|---|
| E01 | S101 | SQL101 | 使用中 |
| E04 | S104 | SQL101 | 已退選 |
| E06 | S105 | PY101 | 使用中 |
學生連結
enrolments.student_id → students.student_id外部鍵指向一位學生。
課程連結
enrolments.course_code → courses.course_code外部鍵指向一門課程。
追溯 E01
S101 + SQL101Alice Wong + SQL 基礎。
重複的 ID 用來連接記錄;姓名和課程名稱則保留在各自的資料表中。一位學生可能會出現在多筆選課記錄中。